package com.stargate.soft;

import java.sql.SQLException;
import java.sql.Date;

import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Acces;
import com.stargate.bd.bean.Affectation;
import com.stargate.bd.bean.Badge;
import com.stargate.bd.bean.Entree;
import com.stargate.bd.bean.Etat;
import com.stargate.bd.bean.FormatDate;
import com.stargate.bd.bean.Personne;
import com.stargate.bd.bean.Reservation;
import com.stargate.bd.bean.Sortie;
import com.stargate.bd.dao.factory.BadgeDAO;
import com.stargate.exception.PlusieursBadgesActifsException;
import com.stargate.exception.ReservationDerniereSalleDisponibleException;
import com.stargate.exception.ReservationDurantJoursFeriesException;
import com.stargate.exception.SalleDejaReserveeException;
import com.stargate.exception.UnSeulPointAccesBatimentException;
import com.stargate.io.LectureClavier;
import com.stargate.soft.scenario.EnregistrerEntree;
import com.stargate.soft.scenario.EnregistrerSortie;
import com.stargate.soft.transaction.badge.ActiverBadge;
import com.stargate.soft.transaction.badge.DesactiverBadge;
import com.stargate.soft.transaction.jourferie.AjouterJourFerie;
import com.stargate.soft.transaction.personne.AjouterBadgePersonne;
import com.stargate.soft.transaction.personne.CreerPersonne;
import com.stargate.soft.transaction.personne.SuppressionPersonne;
import com.stargate.soft.transaction.pointaccesbatiment.SuppressionPointAccesBatiment;
import com.stargate.soft.transaction.reservation.ReservationSalle;


public class StarGateProject {

	
	private static void menu() {
		System.out.println("****************************************");
		System.out.println("***         Menu Principal           ***");
		System.out.println("*** Choisir une action à effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Utilisateurs (comptes et groupes)");
		System.out.println("2 : Locaux (bâtiments, salles et groupes)");
		System.out.println("3 : Autorisations");
		System.out.println("4 : Réservations");
		System.out.println("5 : Entrées / Sorties");
		System.out.println("6 : Alarmes");
		System.out.println("7 : Paramétrage");
		System.out.println("8 : Scénario");
		System.out.println("0 : Quitter (quitter l'application)");
	}
	
	public static void main(String args[]) {
        
        int action;
        boolean exit = false;

        ConnectionBD.getConnection();
        
        /*
System.out.println("");
System.out.println("              _.-'V'-._");
System.out.println("            .'_||   ||_`.");
System.out.println("           //           \\");
System.out.println("          |>             <|");
System.out.println("          ||             ||");
System.out.println("          ||_           _||");
System.out.println("           \\/           //");
System.out.println("            `._||____||_.'");
System.out.println("               `-....-'");
System.out.println("            --//::::::\\--");
System.out.println("            |//::::::::\\|");
System.out.println("            //::::::::::\\");
System.out.println("           //::::::::::::\\");
System.out.println("          /|--------------|\");
        */

  	    while(!exit) {
  	    	menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : utilisateurs(); break;
  	    		case 2 : locaux(); break;
  	    		case 3 : autorisations(); break;
  	    		case 4 : reservations(); break;
  	    		case 5 : entreessorties(); break;
  	    		case 6 : alarme(); break;
  	    		case 7 : parametrage(); break;
  	    		case 8 : scenario(); break;
  	    		default : System.out.println("=> choix incorrect"); menu();
  	    	}
  	    } 	    

  	    ConnectionBD.closeConnection();
  	    
  	    System.out.println("*** Au revoir ***");
     }


	private static void scenario_menu() {
		System.out.println("****************************************");
		System.out.println("***           Menu Scénario          ***");
		System.out.println("*** Choisir une action à effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Créer Personne");
		System.out.println("2 : Ajouter Badge [actif]");
		System.out.println("3 : Ajouter Badge [inactif]");
		System.out.println("4 : Activer Badge");
		System.out.println("5 : Désactiver Badge");//attention !
		System.out.println("6 : Réserver Salle [pas de même type]");
		System.out.println("7 : Réserver Salle [déjà réservée]");
		System.out.println("8 : Réserver Salle [jour ferié]");
		System.out.println("9 : Réserver Salle");
		System.out.println("10 : Supprimer Personne");
		System.out.println("11 : Supprimer Groupe");
		System.out.println("12 : Supprimer Point accès bâtiment");
		System.out.println("13 : Enregistrer une entrée");
		System.out.println("14 : Enregistrer une sortie");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}
	
	private static void scenario() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			scenario_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : SceCreerPersonne(); break;
  	    		case 2 : SceAddBadgeEnab(); break;
  	    		case 3 : SceAddBadgeDisab(); break;
  	    		case 4 : SceActiverBadge(); break;
  	    		case 5 : SceDesactiverBadge(); break;
  	    		case 6 : SceReserverSalleType(); break;
  	    		case 7 : SceReserverSalleReserv(); break;
  	    		case 8 : SceReserverSalleFerie(); break;
  	    		case 9 : SceReserverSalle(); break;
  	    		case 10 : SceSupprPers(); break;
  	    		case 11 : SceSupprGroupe(); break;
  	    		case 12 : SceSupprPointAccBat(); break;
  	    		case 13 : SceEnregistrerEntree(); break;
  	    		case 14 : SceEnregistrerSortie(); break;
  	    		default : System.out.println("=> choix incorrect"); scenario_menu();
  	    	}
  	    }
		
	}


	//////////////////////////////////////////////////
	/////////Les fonctions des Scénarios /////////////
	//////////////////////////////////////////////////

	private static void SceEnregistrerEntree() {
		Acces acces1 = new Acces(103);
		Acces acces2 = new Acces(103);
		
		Entree entree1 = new Entree(-1, "IM2AG-F", "228E", Etat.ENABLE, FormatDate.stringToSQL("21/02/2013"));
		Entree entree2 = new Entree(-1, "IM2AG-F", "228E", Etat.ENABLE, FormatDate.stringToSQL("23/02/2013"));

		try {
			System.out.println("Enregistrement d'une entrée... ");
			EnregistrerEntree enEntree1 = new EnregistrerEntree(acces1, entree1);
			System.out.println("Enregistrement réussi :");
			System.out.println(enEntree1.getAcces());
			System.out.println(enEntree1.getEntree());
			
			System.out.println("Enregistrement d'une entrée... ");
			EnregistrerEntree enEntree2 = new EnregistrerEntree(acces2, entree2);
			System.out.println("Enregistrement réussi :");
			System.out.println(enEntree2.getAcces());
			System.out.println(enEntree2.getEntree());
		} catch (SQLException e) {
			System.err.println("Enregistrement échoué :");
			System.err.println(e.getMessage());
		}
	}
	
	private static void SceEnregistrerSortie() {
		Acces acces1 = new Acces(103);
		Acces acces2 = new Acces(103);
		
		Sortie sortie1 = new Sortie(-1, "112I", "DLST-A", Etat.ENABLE, FormatDate.stringToSQL("22/02/2013"));
		Sortie sortie2 = new Sortie(-1, "112I", "DLST-A", Etat.ENABLE, FormatDate.stringToSQL("24/02/2013"));

		try {
			System.out.println("Enregistrement d'une sortie... ");
			EnregistrerSortie enSortie1 = new EnregistrerSortie(acces1, sortie1);
			System.out.println("Enregistrement réussi :");
			System.out.println(enSortie1.getAcces());
			System.out.println(enSortie1.getSortie());
			
			System.out.println("Enregistrement d'une sortie... ");
			EnregistrerSortie enSortie2 = new EnregistrerSortie(acces2, sortie2);
			System.out.println("Enregistrement réussi :");
			System.out.println(enSortie2.getAcces());
			System.out.println(enSortie2.getSortie());
		} catch (SQLException e) {
			System.err.println("Enregistrement échoué.");
			System.err.println(e.getMessage());
		}
		
	}
	
	private static void SceSupprPointAccBat() {
		// TODO Auto-generated method stub
		
	}

	private static void SceSupprGroupe() {
		// TODO Auto-generated method stub
		
	}

	private static void SceSupprPers() {
		
		BadgeDAO bdao = new BadgeDAO();
		
		try {
			
			int badgeval = bdao.getSeqNumBadge();
			
			com.stargate.soft.scenario.SuppressionPersonne spp = 
					new com.stargate.soft.scenario.SuppressionPersonne(badgeval);
			
		} catch (SQLException e) {
			
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}


	
	private static void SceReserverSalleFerie() {
		Reservation res = new Reservation(3001, "DLST-A", 103, "Semaine1", "Tranche2", 01);
		// ('3002', 'HOTEL-B3', 304, 'Semaine5', 'Tranche6', to_date(sysdate, 'yyyy/mm/dd'), 03);
		
		try {
			
			com.stargate.soft.scenario.ReservationSalle rsa = 
					new com.stargate.soft.scenario.ReservationSalle(res);
			
		} catch (SQLException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (SalleDejaReserveeException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDerniereSalleDisponibleException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDurantJoursFeriesException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}



	private static void SceReserverSalleReserv() {
		Reservation res = new Reservation(3001, "DLST-A", 103, "Semaine4", "Tranche3", 02);
		// ('3002', 'HOTEL-B3', 304, 'Semaine5', 'Tranche6', to_date(sysdate, 'yyyy/mm/dd'), 03);
		
		try {
			
			com.stargate.soft.scenario.ReservationSalle rsa = 
					new com.stargate.soft.scenario.ReservationSalle(res);
			
		} catch (SQLException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (SalleDejaReserveeException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDerniereSalleDisponibleException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDurantJoursFeriesException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}



	private static void SceReserverSalleType() {
		Reservation res = new Reservation(3001, "DLST-A", 104, "Semaine4", "Tranche3", 02);
		// ('3002', 'HOTEL-B3', 304, 'Semaine5', 'Tranche6', to_date(sysdate, 'yyyy/mm/dd'), 03);
		
		try {
			
			com.stargate.soft.scenario.ReservationSalle rsa = 
					new com.stargate.soft.scenario.ReservationSalle(res);
			
		} catch (SQLException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (SalleDejaReserveeException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDerniereSalleDisponibleException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDurantJoursFeriesException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}
	
	

	private static void SceReserverSalle() {

		Reservation res = new Reservation(3002, "HOTEL-B3", 304, "Semaine6", "Tranche6", 03);
		// ('3002', 'HOTEL-B3', 304, 'Semaine5', 'Tranche6', to_date(sysdate, 'yyyy/mm/dd'), 03);
		
		try {
			
			com.stargate.soft.scenario.ReservationSalle rsa = 
					new com.stargate.soft.scenario.ReservationSalle(res);
			
		} catch (SQLException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (SalleDejaReserveeException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDerniereSalleDisponibleException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		} catch (ReservationDurantJoursFeriesException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}



	private static void SceDesactiverBadge() {
		// Est-ce qu'il faut vraiment le faire ?
		
	}



	private static void SceActiverBadge() {
		
		BadgeDAO bdao = new BadgeDAO();
		
		try {
			
			int badgeval = bdao.getSeqNumBadge();
			
			com.stargate.soft.scenario.ActiverBadge ap = 
					new com.stargate.soft.scenario.ActiverBadge(badgeval);
			
		} catch (SQLException e) {
			
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}
		
	}

	
	// choix 2
	private static void SceAddBadgeEnab() {
		Badge bad = new Badge(Etat.ENABLE);
		int id = 21117393;
		
		try {
			System.out.println("Ajout badge actif pour personne n°" + id + "...");
			com.stargate.soft.scenario.AjouterBadgePersonne abp = 
					new com.stargate.soft.scenario.AjouterBadgePersonne(id, bad, null);
			System.out.println("Ajout réussi :");
			System.out.println(abp.getBadge());
			System.out.println(abp.getAffectation());
		} catch (SQLException e) {
			System.err.println("Ajout échoué :");
			System.err.println(e.getMessage());
			ConnectionBD.rollback();
		} catch (PlusieursBadgesActifsException e) {
			System.err.println("Ajout échoué :");
			System.err.println(e.getMessage());
			ConnectionBD.rollback();
		}
	}
	
	// choix 3
	private static void SceAddBadgeDisab() {
		Badge bad = new Badge(Etat.DISABLE);
		int id = 21117393;
		
		try {
			System.out.println("Ajout badge inactif pour personne n°" + id + "...");
			com.stargate.soft.scenario.AjouterBadgePersonne abp = 
					new com.stargate.soft.scenario.AjouterBadgePersonne(id, bad, null);
			System.out.println("Ajout réussi :");
			System.out.println(abp.getBadge());
			System.out.println(abp.getAffectation());
		} catch (SQLException e) {
			System.err.println("Ajout échoué :");
			System.err.println(e.getMessage());
			ConnectionBD.rollback();
		} catch (PlusieursBadgesActifsException e) {
			System.err.println("Ajout échoué :");
			System.err.println(e.getMessage());
			ConnectionBD.rollback();
		}
	}

	// choix 1
	private static void SceCreerPersonne() {
		
		Personne john = new Personne(21117393, "Connor", "John",
				FormatDate.stringToSQL("20/10/1980"), "Miami", null);
		
		try {
			System.out.println("Création d'une personne...");
			com.stargate.soft.scenario.CreerPersonne cp = 
					new com.stargate.soft.scenario.CreerPersonne(john, null);
			System.out.println("Création réussie :");
			System.out.println(john);
			System.out.println(cp.getBadge());
			
		} catch (SQLException e) {
			System.err.println("Création échouée :");
			System.err.println(e.getMessage());
			ConnectionBD.rollback();
		}
	}

	
	//////////////////////////////////////////////////
	/////////Fin fonctions des Scénarios /////////////
	//////////////////////////////////////////////////

	private static void alarme_menu() {
		System.out.println("***                                  ***");
		System.out.println("***           Menu Alarme            ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter les alarmes");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}

	private static void alarme() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			alarme_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirAlarme(); break;
  	    		default : System.out.println("=> choix incorrect"); alarme_menu();
  	    	}
  	    }
		
	}

	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Paramàtrages///////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void voirAlarme() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des Paramàtrages///////////
	//////////////////////////////////////////////////
	
	

	private static void parametrage_menu() {
		System.out.println("***                                  ***");
		System.out.println("***         Menu Paramètrage         ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Ajouter jour ferié");
		System.out.println("2 : Supprimer jour ferié");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}

	private static void parametrage() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			parametrage_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : addJourFerie(); break;
  	    		case 2 : supprJourFerie(); break;
  	    		default : System.out.println("=> choix incorrect"); parametrage_menu();
  	    	}
  	    }
		
	}

	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Paramàtrages///////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void supprJourFerie() {
		
		
		
	}



	private static void addJourFerie() {
		
		AjouterJourFerie ajf = null;
		
			try {
				ajf = new AjouterJourFerie();
				
			} catch (SQLException e) {
				
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			}
		
		System.out.println(ajf.toString());
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des Paramàtrages///////////
	//////////////////////////////////////////////////
	

	
	private static void entreessorties_menu() {
		System.out.println("***                                  ***");
		System.out.println("***      Menu Entrées / Sorties      ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter les entrées");
		System.out.println("2 : Consulter les sorties");
		System.out.println("3 : Simuler une entrée");
		System.out.println("4 : Simuler une sortie");
		System.out.println("5 : Effacer les données obsolètes");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}

	private static void entreessorties() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			entreessorties_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirEntrees(); break;
  	    		case 2 : voirSorties(); break;
  	    		case 3 : simulerEntree(); break;
  	    		case 4 : simulerSortie(); break;
  	    		case 5 : procederArchivage(); break;
  	    		default : System.out.println("=> choix incorrect"); entreessorties_menu();
  	    	}
  	    }
		
	}

	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	///////Les fonctions des entrées/Sorties /////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void procederArchivage() {
		
		
		
	}



	private static void simulerSortie() {

		
		
	}



	private static void simulerEntree() {
		
		
		
	}



	private static void voirSorties() {
		
		
		
	}



	private static void voirEntrees() {
		
		
		
	}

	//////////////////////////////////////////////////
	///////Fin fonctions des entrées/Sorties /////////
	//////////////////////////////////////////////////
	


	private static void reservations_menu() {
		System.out.println("***                                  ***");
		System.out.println("***         Menu Réservations        ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Voir par groupe de personnes");
		System.out.println("2 : Voir par bâtiment");
		System.out.println("3 : Voir par plage de semaine et horaire");
		System.out.println("4 : Nouvelle réservation");
		System.out.println("5 : Supprimer une réservation");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}


	private static void reservations() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			reservations_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirReservParGroupePers(); break;
  	    		case 2 : voirReservParBat(); break;
  	    		case 3 : voirReservParPlage(); break;
  	    		case 4 : addReservation(); break;
  	    		case 5 : supprReservation(); break;
  	    		default : System.out.println("=> choix incorrect"); reservations_menu();
  	    	}
  	    }
	}

	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des réservations///////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////


	private static void supprReservation() {
		
		
		
	}



	private static void addReservation() {
		
		boolean okey = false;
		ReservationSalle rs = null;
		
			try {
				rs = new ReservationSalle();
				
			} catch (SQLException e) {
				
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			} catch (SalleDejaReserveeException e) {

				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			} catch (ReservationDerniereSalleDisponibleException e) {

				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			} catch (ReservationDurantJoursFeriesException e) {
				
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			}
		
		System.out.println(rs.getReservation());
		
	}



	private static void voirReservParPlage() {
		
		
		
	}



	private static void voirReservParBat() {
		
		
		
	}



	private static void voirReservParGroupePers() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des réservations///////////
	//////////////////////////////////////////////////


	private static void autorisations_menu() {
		System.out.println("***                                  ***");
		System.out.println("***         Menu Autorisations       ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Voir par groupe de bâtiments");
		System.out.println("2 : Voir par groupe de personnes");
		System.out.println("3 : Ajouter une autorisation");
		System.out.println("4 : Modifier");
		System.out.println("5 : Supprimer");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}

	private static void autorisations() {
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			autorisations_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirAutoParGroupeBat(); break;
  	    		case 2 : voirAutoParGroupePers(); break;
  	    		case 3 : addAutorisation(); break;
  	    		case 4 : modifierAutorisation(); break;
  	    		case 5 : supprAutorisation(); break;
  	    		default : System.out.println("=> choix incorrect"); autorisations_menu();
  	    	}
  	    }
		
	}


	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Autorisations//////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	

	private static void supprAutorisation() {
		
		
		
	}



	private static void modifierAutorisation() {
		
		
		
	}



	private static void addAutorisation() {
		
		
		
	}



	private static void voirAutoParGroupePers() {
		
		
		
	}



	private static void voirAutoParGroupeBat() {
		
		
		
	}
	
	//////////////////////////////////////////////////
	/////////Fin fonctions des Autorisations//////////
	//////////////////////////////////////////////////



	private static void locaux_menu() {
		System.out.println("***                                  ***");
		System.out.println("***            Menu Locaux           ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Salles");
		System.out.println("2 : bâtiments");
		System.out.println("3 : Groupes (les groupes de bâtiments)");
		System.out.println("4 : Points d'accès");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}

	private static void locaux() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			locaux_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : salles(); break;
  	    		case 2 : batiments(); break;
  	    		case 3 : groupesbat(); break;
  	    		case 4 : pointsacces(); break;
  	    		default : System.out.println("=> choix incorrect"); locaux_menu();
  	    	}
  	    }
	}

	
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les menus des locaux/////////////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void batiments_menu() {
		
		System.out.println("***                                  ***");
		System.out.println("***            Menu bâtiments        ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter les bâtiments");
		System.out.println("2 : Consulter par groupe de bâtiments");
		System.out.println("3 : Nouveau bâtiment");
		System.out.println("4 : Supprimer bâtiment");
		System.out.println("5 : Changer le bâtiment de groupe");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}
	
	private static void batiments() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			batiments_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirBat(); break;
  	    		case 2 : voirBatParGroupe(); break;
  	    		case 3 : addBat(); break;
  	    		case 4 : supprBat(); break;
  	    		case 5 : changerBatDeGroupe(); break;
  	    		default : System.out.println("=> choix incorrect"); batiments_menu();
  	    	}
  	    }
	
	}
	
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des bâtiments//////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////


	private static void changerBatDeGroupe() {
		
		
		
	}



	private static void supprBat() {
		
		
		
	}



	private static void addBat() {
		
		
		
	}



	private static void voirBatParGroupe() {
		
		
		
	}



	private static void voirBat() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des bâtiments//////////////
	//////////////////////////////////////////////////
	
	
	
	
	private static void salles_menu() {
		System.out.println("***                                  ***");
		System.out.println("***           Menu Salles            ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter les salles");
		System.out.println("2 : Cràer nouvelle salle");
		System.out.println("3 : Modifier salle");
		System.out.println("4 : Supprimer salle");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}

	private static void salles() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			salles_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirSalles(); break;
  	    		case 2 : addSalle(); break;
  	    		case 3 : modifSalle(); break;
  	    		case 4 : supprSalle(); break;
  	    		default : System.out.println("=> choix incorrect"); salles_menu();
  	    	}
  	    }
	
	}

	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Salles ////////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void supprSalle() {
		
		
		
	}



	private static void modifSalle() {
		
		
		
	}



	private static void addSalle() {
		
		
		
	}



	private static void voirSalles() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des Salles ////////////////
	//////////////////////////////////////////////////
	
	

	private static void pointsacces_menu() {

		System.out.println("***                                  ***");
		System.out.println("***        Menu Points d'accès       ***");
		System.out.println("*** Choisir une action à effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter Points d'accès");
		System.out.println("2 : Ajouter Point d'accès");
		System.out.println("3 : Modifier Point d'accès");
		System.out.println("4 : Supprimer Point d'accès");
		System.out.println("5 : Consulter Points d'accès bâtiment");
		System.out.println("6 : Ajouter Point d'accès bâtiment");
		System.out.println("7 : Modifier Point d'accès bâtiment");
		System.out.println("8 : Supprimer Point d'accès bâtiment");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}
	
	private static void pointsacces() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			pointsacces_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirPointAcces(); break;
  	    		case 2 : addPointAcces(); break;
  	    		case 3 : modifPointAcces(); break;
  	    		case 4 : supprPointAcces(); break;
  	    		case 5 : voirPointAccesBat(); break;
  	    		case 6 : addPointAccesBat(); break;
  	    		case 7 : modifPointAccesBat(); break;
  	    		case 8 : supprPointAccesBat(); break;
  	    		default : System.out.println("=> choix incorrect"); pointsacces_menu();
  	    	}
  	    }
		
	}

	
	
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Points d'accès/////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////



	private static void supprPointAccesBat() {
		
		SuppressionPointAccesBatiment spab = null;
		
		try {
			
			spab = new SuppressionPointAccesBatiment();
			
		} catch (SQLException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
			
		} catch (UnSeulPointAccesBatimentException e) {
			ConnectionBD.rollback();
			System.err.println(e.getMessage());
		}

	
	System.out.println("Point d'accès supprimé");
		
	}



	private static void modifPointAccesBat() {
		
		
	}



	private static void addPointAccesBat() {
		
		
	}



	private static void voirPointAccesBat() {
		
		
	}



	private static void supprPointAcces() {
		
		
	}



	private static void modifPointAcces() {
		
		
	}



	private static void addPointAcces() {
		
		
	}



	private static void voirPointAcces() {
		
		
	}
	
	//////////////////////////////////////////////////
	/////////Fin fonctions des Points d'accès/////////
	//////////////////////////////////////////////////

	



	private static void groupesbat_menu() {
		System.out.println("***                                  ***");
		System.out.println("***    Menu Groupes de bâtiments     ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter");
		System.out.println("2 : Cràer nouveau groupe");
		System.out.println("3 : Ajouter des bâtiments à un groupe");
		System.out.println("4 : Changer la plage d'accès d'un groupe");
		System.out.println("0 : Quitter (revenir au menu précédent)");
		
	}
	
	private static void groupesbat() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			groupesbat_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirGroupeBat(); break;
  	    		case 2 : addGroupeBat(); break;
  	    		case 3 : supprGroupeBat(); break;
  	    		case 4 : addBatToGroupeBat(); break;
  	    		case 5 : changerPlageGroupeBat(); break;
  	    		default : System.out.println("=> choix incorrect"); groupesbat_menu();
  	    	}
  	    }
		
	}


	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des Groupes Bat////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	private static void supprGroupeBat() {
		
		
		
	}



	private static void changerPlageGroupeBat() {
		
		
		
	}



	private static void addBatToGroupeBat() {
		
		
		
	}



	private static void addGroupeBat() {
		
		
		
	}



	private static void voirGroupeBat() {
		
		
		
	}


	//////////////////////////////////////////////////
	/////////Fin fonctions des Groupes Bat////////////
	//////////////////////////////////////////////////



	

	private static void utilisateurs_menu() {
		System.out.println("***                                  ***");
		System.out.println("***        Menu Utilisateurs         ***");
		System.out.println("*** Choisir une action a effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Personne (les opérations sur les personnes)");
		System.out.println("2 : Badge (les opérations sur les badges)");
		System.out.println("3 : Groupes (les opérations sur les groupes)");
		System.out.println("4 : Historique (les données liées à une personne)");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}
	
	private static void utilisateurs() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			utilisateurs_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : personne(); break;
  	    		case 2 : badge(); break;
  	    		case 3 : groupes(); break;
  	    		case 4 : historique(); break;
  	    		default : System.out.println("=> choix incorrect"); utilisateurs_menu();
  	    	}
  	    } 
		
	}

	
	
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les menus des utilisateurs///////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////

	/*
	 * Cette màthode affiche l'historique complet d'une personne, c'est à dire :
	 *  - Ses badges, anciens et courants
	 *  - Ses groupes, anciens et courants
	 *  - Ses autorisations
	 *  - Ses accès
	 *  - Les alarmes qu'il a dàclenchà
	 */
	private static void historique() {
		
		
		
	}


	
	

	private static void groupes_menu() {
		System.out.println("***                                  ***");
		System.out.println("***           Menu Groupes           ***");
		System.out.println("*** Choisir une action à effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter");
		System.out.println("2 : Nouveau groupe");
		System.out.println("3 : Supprimer groupe");
		System.out.println("4 : Ajouter membre");
		System.out.println("5 : Supprimer membre");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}

	private static void groupes() {
		
		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			groupes_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirGroupes(); break;
  	    		case 2 : addGroupe(); break;
  	    		case 3 : supprGroupe(); break;
  	    		case 4 : addMembre(); break;
  	    		case 5 : supprMembre(); break;
  	    		default : System.out.println("=> choix incorrect"); groupes_menu();
  	    	}
  	    }
		
	}

	
		
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des groupes////////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////


	private static void supprMembre() {
		
		
		
	}



	private static void addMembre() {
		
		
		
	}



	private static void supprGroupe() {
		
		
		
	}



	private static void addGroupe() {
		
		
		
	}



	private static void voirGroupes() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des groupes////////////////
	//////////////////////////////////////////////////


	private static void badge_menu() {
		System.out.println("***                                  ***");
		System.out.println("***           Menu Badge             ***");
		System.out.println("*** Choisir une action à effectuer : ***");
		System.out.println("***                                  ***");
		System.out.println("1 : Consulter");
		System.out.println("2 : Activer");
		System.out.println("3 : Desactiver");
		System.out.println("4 : Nouveau Badge");
		System.out.println("0 : Quitter (revenir au menu précédent)");
	}

	private static void badge() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			badge_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirBadge(); break;
  	    		case 2 : activerBadge(); break;
  	    		case 3 : desactiverBadge(); break;
  	    		case 4 : addBadge(); break;
  	    		default : System.out.println("=> choix incorrect"); badge_menu();
  	    	}
  	    }
	}


	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des badges/////////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////


	private static void addBadge() {
		
		
		
	}




	private static void desactiverBadge() {
		
		DesactiverBadge dsb = null;
				
			try {
				
				dsb = new DesactiverBadge();
				
			} catch (SQLException e) {
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
				
			}

		
		System.out.println(dsb.getBadge());
		
	}



	private static void activerBadge() {
		
		ActiverBadge ab = null;
			
			try {
				
				ab = new ActiverBadge();
				
			} catch (SQLException e) {
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
				
			}
		
		System.out.println(ab.getBadge());
		
	}



	private static void voirBadge() {
		
		
		
	}
	
	//////////////////////////////////////////////////
	/////////Fin fonctions des badges/////////////////
	//////////////////////////////////////////////////




	private static void personne_menu() {

			System.out.println("***                                  ***");
			System.out.println("***        Menu Personne             ***");
			System.out.println("*** Choisir une action à effectuer : ***");
			System.out.println("***                                  ***");
			System.out.println("1 : Consulter");
			System.out.println("2 : Modifier");
			System.out.println("3 : Supprimer");
			System.out.println("4 : Nouvelle personne");
			System.out.println("5 : Affecter nouveau badge");
			System.out.println("0 : Quitter (revenir au menu précédent)");
	}

	private static void personne() {

		int action = 0;
        boolean exit = false;
		
		while(!exit) {
			personne_menu();
  	    	action = LectureClavier.lireEntier("Votre choix ?");
  	    	switch(action) {
  	    		case 0 : exit = true; break;
  	    		case 1 : voirPersonne(); break;
  	    		case 2 : modifPersonne(); break;
  	    		case 3 : supprPersonne(); break;
  	    		case 4 : addPersonne(); break;
  	    		case 5 : addBadgeToPersonne(); break;
  	    		default : System.out.println("=> choix incorrect"); personne_menu();
  	    	}
  	    }
	}


	
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////
	/////////Les fonctions des personnes//////////////
	//////////////////////////////////////////////////
	//////////////////////////////////////////////////


	private static void addBadgeToPersonne() {
		
		AjouterBadgePersonne abp = null;
			
			try {
				
				abp = new AjouterBadgePersonne();
				
			} catch (SQLException e) {
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
				
			} catch (PlusieursBadgesActifsException e) {
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
				
			}
		
		System.out.println(abp.getBadge());
		
	}



	private static void addPersonne() {
		
		CreerPersonne cp = null;
			
			try {
				cp = new CreerPersonne();
				
			} catch (SQLException e) {
				
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			}
		
		System.out.println(cp.getPersonne());
		
	}





	private static void supprPersonne() {
		
		SuppressionPersonne sp = null;
		
			try {
				sp = new SuppressionPersonne();
				
			} catch (SQLException e) {
				
				ConnectionBD.rollback();
				System.err.println(e.getMessage());
			}
		
		System.out.println("Personne supprimée");
		
	}





	private static void modifPersonne() {
		
		
		
	}





	private static void voirPersonne() {
		
		
		
	}

	//////////////////////////////////////////////////
	/////////Fin fonctions des personnes//////////////
	//////////////////////////////////////////////////



}
